package utils

import (
	"fmt"

	"go.bug.st/serial/enumerator"
)

// 定义目标设备的硬件标识
type DeviceFilter struct {
	VID          string // 供应商ID，如"0483"
	PID          string // 产品ID，如"5740"
	SerialNumber string // 序列号，如"12345678"
}

// FindSerialPort 根据VID、PID和序列号查找匹配的串口
func FindSerialPort(filter DeviceFilter) (string, error) {
	// 获取所有可用串口的详细信息
	ports, err := enumerator.GetDetailedPortsList()
	if err != nil {
		return "", fmt.Errorf("获取串口列表失败: %v", err)
	}

	if len(ports) == 0 {
		return "", fmt.Errorf("未找到任何可用串口")
	}

	// 遍历所有串口，筛选符合条件的设备
	for _, port := range ports {
		// 检查VID、PID是否匹配（忽略空值匹配，支持部分筛选）
		vidMatch := filter.VID == "" || port.VID == filter.VID
		pidMatch := filter.PID == "" || port.PID == filter.PID
		serialMatch := filter.SerialNumber == "" || port.SerialNumber == filter.SerialNumber

		// 所有非空条件都匹配时，返回该串口名称
		if vidMatch && pidMatch && serialMatch {
			return port.Name, nil
		}
	}

	return "", fmt.Errorf("未找到匹配的串口 (VID: %s, PID: %s, Serial: %s)",
		filter.VID, filter.PID, filter.SerialNumber)
}
